#pragma once

#include "Assert.h"

namespace MockItNow
{
	class FunctionCallRecord;

	enum Argument
	{
		Argument1 = 0x001,
		Argument2 = 0x002,
		Argument3 = 0x004,
		Argument4 = 0x008,
		Argument5 = 0x010,
		Argument6 = 0x020,
		Argument7 = 0x040,
		Argument8 = 0x080,
		Argument9 = 0x100,

		NumArguments = 9,
		AllArguments = (1 << NumArguments) - 1,

		This = 0x200
	};

	class MockerInterface
	{
	public:

		static MockerInterface& Instance()
		{
			MOCKITNOW_ASSERT(m_interfaceInstance != 0);
			return *m_interfaceInstance;
		}

		virtual ~MockerInterface(){}

		virtual FunctionCallRecord* RegisterRecordFunctionCall(int numArguments, void* context) = 0;
		virtual FunctionCallRecord* RegisterReplayFunctionCall(void* context) = 0;

	protected:

		static MockerInterface* m_interfaceInstance;
	};
}
